﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using Control.Catalogo;
using Entidades.Catalogo;
using Entidades.General;
using Entidades.Solicitud;
using System.Data;
using System.Reflection;
using Navegador.Vistas;
using Control.Solicitud;
using System.Text.RegularExpressions;

namespace SICOIA.UserControls.Solicitud
{
    public partial class ucSolicitud : ViewController //System.Web.UI.UserControl
    {
        #region Controles

        private EntUsuario Usuario
        {
            get { return (EntUsuario)Session["UserPemex"]; }
        }

        CtrlSolicitudArchivos controlArchivos = new CtrlSolicitudArchivos();
        CtrlSolicitud controlSolicitud = new CtrlSolicitud();
        CtrlSolicitudSeguimiento controlSolicitudSeguimiento = new CtrlSolicitudSeguimiento();
        CtrlTurnarJefeArea controlTurnarJefeArea = new CtrlTurnarJefeArea();
        DataTable tablaArchivos = new DataTable();
        DataTable tablaComentarios = new DataTable();
        #endregion

        protected void Page_Load(object sender, EventArgs e)
        {
            if ((EntUsuario)Session["UserPemex"] == null)
                Response.Write("<script>parent.window.open('../Marcos/EndPEMEX.aspx','_top')</script>");
            else
                PermisosUsuario();

            LlenarComboArea();
            if (!Page.IsPostBack)
            {
                HddAccion.Value = (Request.Params["accion"] != null ? Request.Params["accion"].ToString() : "nuevo");

                if (HddAccion.Value == "nuevo")
                {
                    GetSolicitudArchivos();
                    GetSolicitudComentarios();

                    ImgPDF_DatosPresupuestales.Visible = false;
                    ImgPDF_Planos.Visible = false;
                }
                else if (HddAccion.Value == "editar")
                {
                    HddCveSolicitud.Value = Request.Params["IdSolicitud"].ToString();
                    GetSolicitud();
                    GetSolicitudArchivos();
                    GetSolicitudComentarios();
                }

                LlenarComboTurnar();
            }
        }

        private void PermisosUsuario()
        {
            if (Usuario.CveRol == 11)
            {
                pnlSol.Visible = false;
                lblTurnar.Visible = false;
                UpdatePanelComboTurnar.Visible = false;
                UpdatePanelJefes.Visible = false;
                btnAgregarJefe.Visible = false;
                btnEliminarJefe.Visible = false;
            }
        }

        #region Base De Datos

        private void GetSolicitud()
        {
            try
            {
                EntSolicitud solicitud = new EntSolicitud();
                solicitud.CveSolicitud = int.Parse(HddCveSolicitud.Value);
                controlSolicitud = new CtrlSolicitud();

                solicitud = controlSolicitud.Obtener(solicitud);

                if (solicitud != null)
                {
                    lblStatus.Text = "Estatus: "+solicitud.Estatus;
                    HddCveSolicitud.Value = solicitud.CveSolicitud.ToString();
                    hddStatus.Value = solicitud.CveEstatus.ToString();
                    txtNotaTurno.Text = solicitud.NumeroNotaTurno;
                    txtFechaInicioNotaTurno.Text = solicitud.FechaNota;
                    txtNumeroOficio.Text = solicitud.NoOficio;
                    txtFechaOficio.Text = solicitud.FechaOficio;
                    cmbArea.SelectedIndex = cmbArea.Items.IndexOf(cmbArea.Items.FindByValue(solicitud.CveSolicitante.ToString()));
                    txtComentarios.Text = solicitud.Comentario;
                    txtAutorizo.Text = solicitud.NombreSolicitante;

                    string[] Jefes = null;

                    if (!string.IsNullOrWhiteSpace(solicitud.Jefes))
                    {
                        Jefes = solicitud.Jefes.Split(',');

                        for (int i = 0; i < Jefes.Count(); i++)
                        {
                            string[] elemento = Jefes[i].Split('|');

                            lstJefes.Items.Add(new ListItem(elemento[1].ToString(), elemento[0].ToString().Trim()));
                        }
                    }

                    if (!string.IsNullOrEmpty(solicitud.FileDatosPresupuestales))
                    {
                        //AsyncFileUploadDatosPresupuestales.Visible = false;
                        AsyncFileUploadDatosPresupuestales.Style.Add("display", "none");
                        ImgPDF_DatosPresupuestales.Visible = true;
                        ImgPDF_DatosPresupuestales.Attributes.Add("onclick", "JavaScript:VerArchivo('" + solicitud.FileDatosPresupuestales + "');");
                        ImgPDF_DatosPresupuestales.Style.Add("cursor", "hand");

                        ImgEliminarArchivoPresupuestales.Visible = true;
                        ImgEliminarArchivoPresupuestales.Style.Add("cursor", "hand");

                        PathPresupuestales.Value = solicitud.FileDatosPresupuestales;
                    }
                    else
                    {
                        ImgPDF_DatosPresupuestales.Visible = false;
                        ImgEliminarArchivoPresupuestales.Visible = false;
                    }

                    if (!string.IsNullOrEmpty(solicitud.FilePlanos))
                    {
                        //AsyncFileUploadPlanos.Visible = false;
                        AsyncFileUploadPlanos.Style.Add("display", "none");
                        ImgPDF_Planos.Visible = true;
                        ImgPDF_Planos.Attributes.Add("onclick", "JavaScript:VerArchivo('" + solicitud.FilePlanos + "');");
                        ImgPDF_Planos.Style.Add("cursor", "hand");

                        ImgEliminarArchivoPlanos.Visible = true;
                        ImgEliminarArchivoPlanos.Style.Add("cursor", "hand");

                        PathPlanos.Value = solicitud.FilePlanos;
                    }
                    else
                    {
                        ImgPDF_Planos.Visible = false;
                        ImgEliminarArchivoPlanos.Visible = false;
                    }
                }
            }
            catch (BussinesLogicException ex)
            {
                Mensaje(ex.Message);
            }
        }

        private void GetSolicitudArchivos()
        {
            try
            {
                tablaArchivos.Clear();
                tablaArchivos = ListToDataTable<EntSolicitudArchivos>(controlArchivos.ObtenerTodos(new EntSolicitudArchivos() { CveSolicitud = int.Parse(HddCveSolicitud.Value) }));
                this.grdArchivos.DataSource = tablaArchivos;
                this.grdArchivos.DataBind();
                GuardarEstado("tablaArchivos", tablaArchivos);
            }
            catch (BussinesLogicException ex)
            {
                Mensaje(ex.Message);
            }
        }

        private void GetSolicitudComentarios()
        {
            try
            {
                tablaComentarios.Clear();
                tablaComentarios = ListToDataTable<EntSolicitudSeguimiento>(controlSolicitudSeguimiento.ObtenerTodos(new EntSolicitudSeguimiento() { CveSolicitud = int.Parse(HddCveSolicitud.Value) }));
                this.grdComentarios.DataSource = tablaComentarios;
                this.grdComentarios.DataBind();
                GuardarEstado("tablaComentarios", tablaComentarios);
            }
            catch (BussinesLogicException ex)
            {
                Mensaje(ex.Message);
            }
        }

        #endregion

        #region "Eventos Toolbar"

        protected void btnGuardar_Click(object sender, EventArgs e)
        {
            try
            {
                EntSolicitud solicitud = new EntSolicitud();

                solicitud.CveSolicitud = int.Parse(HddCveSolicitud.Value);
                solicitud.FechaOficio = txtFechaOficio.Text;
                solicitud.NoOficio = txtNumeroOficio.Text;
                solicitud.CveActivo = 1;
                solicitud.CveSolicitante = Int32.Parse(cmbArea.SelectedValue);
                solicitud.CveEstatus = int.Parse( hddStatus.Value);
                solicitud.Comentario = txtComentarios.Text;
                solicitud.NombreSolicitante = txtAutorizo.Text;
                solicitud.NumeroNotaTurno = txtNotaTurno.Text;
                solicitud.FechaNota = txtFechaInicioNotaTurno.Text;
                solicitud.UsuarioMtto = Usuario.CveUsuario.ToString();

                if (AsyncFileUploadDatosPresupuestales.HasFile)
                {
                    if (!System.IO.File.Exists(Server.MapPath("../Archivos/") + AsyncFileUploadDatosPresupuestales.FileName))
                        System.IO.File.Move(Server.MapPath("../TempArchivos/") + AsyncFileUploadDatosPresupuestales.FileName, Server.MapPath("../Archivos/") + AsyncFileUploadDatosPresupuestales.FileName);

                    solicitud.FileDatosPresupuestales = "../Archivos/" + AsyncFileUploadDatosPresupuestales.FileName;
                }
                else if (hddEliminadoPresupuestales.Value.Equals("1"))
                    solicitud.FileDatosPresupuestales = string.Empty;
                else
                    solicitud.FileDatosPresupuestales = PathPresupuestales.Value;

                if (AsyncFileUploadPlanos.HasFile)
                {
                    if (!System.IO.File.Exists(Server.MapPath("../Archivos/") + AsyncFileUploadPlanos.FileName))
                        System.IO.File.Move(Server.MapPath("../TempArchivos/") + AsyncFileUploadPlanos.FileName, Server.MapPath("../Archivos/") + AsyncFileUploadPlanos.FileName);

                    solicitud.FilePlanos = "../Archivos/" + AsyncFileUploadPlanos.FileName;
                }
                else if (hddEliminadoPlanos.Value.Equals("1"))
                    solicitud.FilePlanos = string.Empty;
                else
                    solicitud.FilePlanos = PathPlanos.Value;

                if (Usuario.CveRol != 11)
                {
                    string Jefes = string.Empty;

                    foreach (ListItem itemJefe in lstJefes.Items)
                        Jefes = Jefes + itemJefe.Value + "|";

                    solicitud.Jefes = Jefes.Substring(0, Jefes.Length - 1);
                }

                tablaComentarios.Clear();
                tablaComentarios = (DataTable)ObtenerEstado("tablaComentarios");

                List<EntSolicitudSeguimiento> listaComentarios = new List<EntSolicitudSeguimiento>();

                EntSolicitudSeguimiento entComentarios;
                foreach (DataRow elemento in tablaComentarios.Rows)
                {
                    if (elemento.RowState == DataRowState.Deleted)
                    {
                        entComentarios = new EntSolicitudSeguimiento();
                        entComentarios.Accion = "eliminar";
                        entComentarios.CveSolicitud = (HddAccion.Value == "nuevo" ? 0 : int.Parse(HddCveSolicitud.Value));
                        elemento.RejectChanges();
                        entComentarios.Comentarios = elemento[2].ToString();
                        entComentarios.CveSeguimiento = int.Parse(elemento[0].ToString());
                        entComentarios.EnviarEmail = elemento[1].ToString();
                        entComentarios.FechaRegistro = elemento[6].ToString();
                        entComentarios.FechaUltimoCambio = elemento[6].ToString();
                        entComentarios.IpMtto = Usuario.IpMtto;
                        entComentarios.PcMtto = Usuario.PcMtto;
                        entComentarios.UsuarioMtto = Usuario.UsuarioMtto;
                        elemento.Delete();
                        listaComentarios.Add(entComentarios);
                    }
                    if (elemento.RowState == DataRowState.Added)
                    {
                        entComentarios = new EntSolicitudSeguimiento();
                        entComentarios.Accion = "nuevo";
                        entComentarios.CveSolicitud = (HddAccion.Value == "nuevo" ? 0 : int.Parse(HddCveSolicitud.Value));
                        entComentarios.Comentarios = elemento[2].ToString();
                        entComentarios.CveSeguimiento = int.Parse(elemento[0].ToString());
                        entComentarios.EnviarEmail = elemento[1].ToString();
                        entComentarios.FechaRegistro = elemento[6].ToString();
                        entComentarios.FechaUltimoCambio = elemento[6].ToString();
                        entComentarios.IpMtto = Usuario.IpMtto;
                        entComentarios.PcMtto = Usuario.PcMtto;
                        entComentarios.UsuarioMtto = Usuario.UsuarioMtto;
                        listaComentarios.Add(entComentarios);
                    }
                }

                if (listaComentarios.Count > 0)
                    solicitud.ListaComentarios = listaComentarios;


                tablaArchivos.Clear();
                tablaArchivos = (DataTable)ObtenerEstado("tablaArchivos");

                List<EntSolicitudArchivos> listaArchivos = new List<EntSolicitudArchivos>();

                EntSolicitudArchivos entArchivos;

                foreach (DataRow elemento in tablaArchivos.Rows)
                {
                    if (elemento.RowState == DataRowState.Deleted)
                    {
                        entArchivos = new EntSolicitudArchivos();
                        entArchivos.Accion = "eliminar";
                        entArchivos.CveSolicitud = (HddAccion.Value == "nuevo" ? 0 : int.Parse(HddCveSolicitud.Value));
                        elemento.RejectChanges();
                        entArchivos.Descripcion = elemento[2].ToString();
                        entArchivos.CveArchivo = int.Parse(elemento[0].ToString());
                        entArchivos.RutaArchivo = elemento[3].ToString();
                        entArchivos.FechaRegistro = elemento[3].ToString();
                        entArchivos.FechaUltimoCambio = elemento[3].ToString();
                        entArchivos.CveUsuarioMtto = Usuario.UsuarioMtto;
                        elemento.Delete();
                        listaArchivos.Add(entArchivos);
                    }
                    if (elemento.RowState == DataRowState.Added)
                    {
                        entArchivos = new EntSolicitudArchivos();
                        entArchivos.Accion = "nuevo";
                        entArchivos.CveSolicitud = (HddAccion.Value == "nuevo" ? 0 : int.Parse(HddCveSolicitud.Value));
                        entArchivos.Descripcion = elemento[2].ToString();
                        entArchivos.CveArchivo = int.Parse(elemento[0].ToString());

                        if (!System.IO.File.Exists(Server.MapPath("../Archivos/") + elemento[6].ToString()))
                            System.IO.File.Move(Server.MapPath("../TempArchivos/") + elemento[6].ToString(), Server.MapPath("../Archivos/") + elemento[6].ToString());

                        entArchivos.RutaArchivo = "../Archivos/" + elemento[6].ToString();

                        entArchivos.FechaRegistro = elemento[3].ToString();
                        entArchivos.FechaUltimoCambio = elemento[3].ToString();
                        entArchivos.CveUsuarioMtto = Usuario.UsuarioMtto;
                        listaArchivos.Add(entArchivos);
                    }
                }
                controlSolicitud.usuario = Usuario;

                if (listaArchivos.Count > 0)
                    solicitud.ListaArchivos = listaArchivos;

                string msgAdicional = "";
                if (hddStatus.Value.Trim().Equals("-1") && solicitud.FileDatosPresupuestales != "" && solicitud.FilePlanos != "")
                    msgAdicional = "La Solicitud ha cambiado a estatus de Solicitada, un asesor de Control de Obras la revisara y turnara para su atención";

                else if (hddStatus.Value.Trim().Equals("0") && solicitud.FileDatosPresupuestales != "" && solicitud.FilePlanos != "" && solicitud.Jefes.Length > 0)
                    msgAdicional = "La Solicitud ha cambiado a estatus de Pendiente, en espera que los Afectados y Obras asociadas sean completadas";
                

                if (HddAccion.Value.ToString() == "nuevo")
                {
                    controlSolicitud.Insertar(solicitud);
                    Limpiar();
                    Mensaje("Se Guardo Correctamente La Solicitud.", true, controlSolicitud.CveSolicitud);
                }
                else if (HddAccion.Value.ToString() == "editar")
                {
                    controlSolicitud.Actualizar(solicitud);
                    Limpiar();
                    Mensaje("Se Actualizo Correctamente La Solicitud. " + msgAdicional, true, controlSolicitud.CveSolicitud);
                }

            }
            catch (BussinesLogicException ex)
            {
                Mensaje(Regex.Replace(ex.Message, "(\n|\r)+", ""));
            }
        }

        protected void btnNuevo_Click(object sender, EventArgs e)
        {
            Limpiar();
        }

        protected void btnAgregarJefe_Click(object sender, EventArgs e)
        {
            try
            {
                if (cmbTurnar.SelectedIndex == 0) throw new BussinesLogicException("Debe Seleccionar un empleado para turnar la Solicitud");

                lstJefes.Items.Add(new ListItem(cmbTurnar.SelectedItem.Text, cmbTurnar.SelectedItem.Value));
                cmbTurnar.Items.Remove(cmbTurnar.SelectedItem);
                cmbTurnar.SelectedIndex = 0;
                UpdatePanelComboTurnar.Update();
            }
            catch (BussinesLogicException ex)
            {
                Mensaje(ex.Message);
            }
        }

        protected void btnEliminarJefe_Click(object sender, EventArgs e)
        {
            try
            {
                controlTurnarJefeArea.Eliminar(new EntTurnarJefeArea() { CveSolicitud = int.Parse(HddCveSolicitud.Value), CveUsuario = int.Parse(lstJefes.SelectedItem.Value) });
                cmbTurnar.Items.Add(new ListItem(lstJefes.SelectedItem.Text, lstJefes.SelectedItem.Value));
                lstJefes.Items.Remove(lstJefes.SelectedItem);
                UpdatePanelComboTurnar.Update();
            }
            catch (BussinesLogicException ex)
            {
                Mensaje(ex.Message);
            }
        }

        private void Limpiar()
        {
            hddEliminadoPlanos.Value = "0";
            hddEliminadoPresupuestales.Value = "0";
            HddAccion.Value = "nuevo";
            HddCveSolicitud.Value = "0";
            txtFechaOficio.Text = string.Empty;
            txtNotaTurno.Text = string.Empty;
            cmbArea.SelectedIndex = 0;
            cmbTurnar.SelectedIndex = 0;
            txtComentarios.Text = string.Empty;
            txtAutorizo.Text = string.Empty;
            txtNumeroOficio.Text = string.Empty;
            txtFechaInicioNotaTurno.Text = string.Empty;
            lstJefes.Items.Clear();

            AsyncFileUploadDatosPresupuestales.ClearAllFilesFromPersistedStore();
            AsyncFileUploadDatosPresupuestales.ClearFileFromPersistedStore();
            AsyncFileUploadDatosPresupuestales.UploadingBackColor = System.Drawing.Color.White;
            AsyncFileUploadDatosPresupuestales.Visible = true;
            ImgPDF_DatosPresupuestales.Visible = false;
            ImgEliminarArchivoPresupuestales.Visible = false;

            AsyncFileUploadPlanos.ClearAllFilesFromPersistedStore();
            AsyncFileUploadPlanos.ClearFileFromPersistedStore();
            AsyncFileUploadPlanos.UploadingBackColor = System.Drawing.Color.White;
            AsyncFileUploadPlanos.Visible = true;
            ImgPDF_Planos.Visible = false;
            ImgEliminarArchivoPlanos.Visible = false;

            GetSolicitudArchivos();
            GetSolicitudComentarios();
        }

        #endregion

        #region "Utilerias"

        public static DataTable ListToDataTable<T>(List<T> list)
        {
            DataTable dt = new DataTable();

            foreach (PropertyInfo info in typeof(T).GetProperties())
            {
                dt.Columns.Add(new DataColumn(info.Name, info.PropertyType));
            }
            foreach (T t in list)
            {
                DataRow row = dt.NewRow();
                foreach (PropertyInfo info in typeof(T).GetProperties())
                {
                    object propiedad = new object();
                    propiedad = info.Name;
                    row[info.Name] = info.GetValue(t, null);
                }
                dt.Rows.Add(row);
            }
            dt.AcceptChanges();
            return dt;
        }

        private void LlenarComboArea()
        {
            CtrlSolicitante controlSolicitante = new CtrlSolicitante();

            List<EntSolicitante> ListaSolicitante = new List<EntSolicitante>();
            ListaSolicitante = (List<EntSolicitante>)controlSolicitante.ObtenerTodos().ConvertAll<EntSolicitante>(delegate(IEntidad enti) { return (EntSolicitante)enti; });

            int indexCombo = 0;
            this.cmbArea.Items.Clear();
            if (Usuario.CveRol == 11)
            {
                foreach (EntSolicitante elemento in ListaSolicitante)
                    if (elemento.CveSolicitante == int.Parse(Usuario.CveArea))
                    this.cmbArea.Items.Add(new ListItem(elemento.Descripcion, elemento.CveSolicitante.ToString(), true));
            }
            else
            {
                this.cmbArea.Items.Insert(0, new ListItem("Seleccione un Elemento", "-1", true));
                foreach (EntSolicitante elemento in ListaSolicitante)
                    this.cmbArea.Items.Insert(indexCombo += 1, new ListItem(elemento.Descripcion, elemento.CveSolicitante.ToString(), true));
            }
        }

        private void LlenarComboTurnar()
        {
            try
            {
                CtrlUsuario ctrlUsuario = new CtrlUsuario();
                EntUsuario usuario = new EntUsuario();
                usuario.CveRol = 1;

                List<EntUsuario> ListaUsuario = new List<EntUsuario>();
                ListaUsuario = (List<EntUsuario>)ctrlUsuario.ObtenerTodos(usuario).ConvertAll<EntUsuario>(delegate(IEntidad enti) { return (EntUsuario)enti; });

                int indexCombo = 0;
                this.cmbTurnar.Items.Clear();
                this.cmbTurnar.Items.Insert(0, new ListItem("Seleccione un Elemento", "-1", true));
                foreach (EntUsuario elemento in ListaUsuario)
                {
                    if (lstJefes.Items.FindByValue(elemento.CveUsuario.ToString()) == null)
                        this.cmbTurnar.Items.Insert(indexCombo += 1, new ListItem(elemento.NombreCompleto, elemento.CveUsuario.ToString(), true));
                }

            }
            catch (BussinesLogicException ex)
            {
                Mensaje(ex.Message);
            }
        }

        private void EliminarFilaGrid(string TableName, int FilaEliminar)
        {
            if (TableName == "comentarios")
            {
                tablaComentarios.Clear();
                tablaComentarios = (DataTable)ObtenerEstado("tablaComentarios");
                if (tablaComentarios.Rows.Count > 0)
                {
                    foreach (DataRow elemento in tablaComentarios.Rows)
                    {
                        if (elemento != null && elemento.RowState != DataRowState.Deleted && elemento[0].ToString() == FilaEliminar.ToString())
                        {
                            elemento.Delete();
                            break;
                        }
                    }
                    grdComentarios.DataSource = tablaComentarios;
                    grdComentarios.DataBind();
                    GuardarEstado("tablaComentarios", tablaComentarios);
                    UpdatePanelComentarios.Update();
                }
            }
            else if (TableName == "archivos")
            {
                tablaArchivos.Clear();
                tablaArchivos = (DataTable)ObtenerEstado("tablaArchivos");
                if (tablaArchivos.Rows.Count > 0)
                {
                    foreach (DataRow elemento in tablaArchivos.Rows)
                    {
                        if (elemento != null && elemento.RowState != DataRowState.Deleted && elemento[0].ToString() == FilaEliminar.ToString())
                        {
                            elemento.Delete();
                            break;
                        }
                    }
                    grdArchivos.DataSource = tablaArchivos;
                    grdArchivos.DataBind();
                    GuardarEstado("tablaArchivos", tablaArchivos);
                    UpdatePanelArchivos.Update();
                }
            }
        }

        private void Mensaje(string msg, bool Obra = false, int IdSolicitud = 0)
        {
            string script = string.Empty;
            string CadMensaje = string.Empty;
            CadMensaje = msg.Replace("`", "").Replace("´", "").Replace("\"", "").Replace("'`", "").Replace("'", "");
            script = "<script type='text/javascript' language='javascript'>alert('";
            script = script + CadMensaje + "');";

            if (Obra)
                script = script + "if (confirm('¿Desea Agregar Obras a la Solicitud.?')) window.parent.GoPage('Obra','&accion=nuevo&IdSolicitud=" + IdSolicitud.ToString() + "');";

            script = script + "</script>";

            ScriptManager.RegisterStartupScript(UpdatePanelCuerpo, this.GetType(), "temp", script, false);
        }

        #endregion

        #region Archivos

        protected void btnAgregarArchivo_Click(object sender, EventArgs e)
        {
            try
            {
                tablaArchivos.Clear();
                tablaArchivos = (DataTable)ObtenerEstado("tablaArchivos");
                DataRow filaNueva = tablaArchivos.NewRow();

                filaNueva[0] = tablaArchivos.Rows.Count + 1;  //CveArchivo
                filaNueva[1] = (HddCveSolicitud.Value == string.Empty ? 0 : int.Parse(HddCveSolicitud.Value));
                filaNueva[2] = txtDescripcionDocumento.Text;
                filaNueva[3] = DateTime.Now.ToShortDateString();

                string filename = System.IO.Path.GetFileName(FileSolicitud.FileName);

                filaNueva[6] = filename;

                tablaArchivos.Rows.Add(filaNueva);

                this.grdArchivos.DataSource = tablaArchivos;
                this.grdArchivos.DataBind();
                GuardarEstado("tablaArchivos", tablaArchivos);

                this.txtDescripcionDocumento.Text = string.Empty;
                this.UpdatePanelControlsArchivo.Update();
            }
            catch (BussinesLogicException ex)
            {
                Mensaje(ex.Message);
            }
        }

        protected void FileSolicitud_UploadedComplete(object sender, AjaxControlToolkit.AsyncFileUploadEventArgs e)
        {
            string filename = System.IO.Path.GetFileName(FileSolicitud.FileName);
            FileSolicitud.SaveAs(Server.MapPath("../TempArchivos/") + filename);
        }

        protected void grdArchivos_PageIndexChanging(object sender, GridViewPageEventArgs e)
        {
            GridView gv = (GridView)sender;
            gv.PageIndex = e.NewPageIndex;
        }

        protected void grdArchivos_RowCommand(object sender, GridViewCommandEventArgs e)
        {
            if (e.CommandName == "eliminar")
                EliminarFilaGrid("archivos", int.Parse(e.CommandArgument.ToString()));
        }

        protected void grdArchivos_RowDataBound(object sender, GridViewRowEventArgs e)
        {
            if (e.Row.RowType == DataControlRowType.DataRow)
            {
                ImageButton btnArchivo = (ImageButton)e.Row.FindControl("btnArchivo");

                if (string.IsNullOrEmpty(btnArchivo.CommandArgument))
                    btnArchivo.Visible = false;
            }
        }

        protected void AsyncFileUploadDatosPresupuestales_UploadedComplete(object sender, AjaxControlToolkit.AsyncFileUploadEventArgs e)
        {
            string filename = System.IO.Path.GetFileName(AsyncFileUploadDatosPresupuestales.FileName);
            AsyncFileUploadDatosPresupuestales.SaveAs(Server.MapPath("../TempArchivos/") + filename);
        }

        protected void AsyncFileUploadPlanos_UploadedComplete(object sender, AjaxControlToolkit.AsyncFileUploadEventArgs e)
        {
            string filename = System.IO.Path.GetFileName(AsyncFileUploadPlanos.FileName);
            AsyncFileUploadPlanos.SaveAs(Server.MapPath("../TempArchivos/") + filename);
        }

        #endregion

        #region Comentarios

        protected void btnAgregarComentario_Click(object sender, EventArgs e)
        {
            try
            {
                tablaComentarios.Clear();
                tablaComentarios = (DataTable)ObtenerEstado("tablaComentarios");
                DataRow filaNueva = tablaComentarios.NewRow();

                filaNueva[0] = tablaComentarios.Rows.Count + 1;  //Id CveSeguimiento
                filaNueva[1] = chkEMail.SelectedItem.Value;
                filaNueva[2] = txtComentariosSolicitud.Text;
                filaNueva[3] = (HddCveSolicitud.Value == string.Empty ? 0 : int.Parse(HddCveSolicitud.Value));  //Id CveSolicitud
                filaNueva[6] = DateTime.Now.ToShortDateString();

                tablaComentarios.Rows.Add(filaNueva);

                this.grdComentarios.DataSource = tablaComentarios;
                this.grdComentarios.DataBind();
                GuardarEstado("tablaComentarios", tablaComentarios);

                txtComentariosSolicitud.Text = string.Empty;
                chkEMail.Items[0].Selected = false;
                chkEMail.Items[1].Selected = false;

                this.UpdatePanelControlsComentarios.Update();
            }
            catch (BussinesLogicException ex)
            {
                Mensaje(ex.Message);
            }
        }

        protected void grdComentarios_PageIndexChanging(object sender, GridViewPageEventArgs e)
        {
            GridView gv = (GridView)sender;
            gv.PageIndex = e.NewPageIndex;

            this.grdComentarios.DataBind();
        }

        protected void grdComentarios_RowCommand(object sender, GridViewCommandEventArgs e)
        {
            if (e.CommandName == "eliminar")
                EliminarFilaGrid("comentarios", int.Parse(e.CommandArgument.ToString()));
        }

        #endregion

    }
}